1 : <?php
2 : /*--------------------------------------------------------------------------+
3 : This file is part of eStudy.
4 : admin/index.php
5 : - Modulgruppe: File Manager
6 : - Beschreibung: Neuer, revolutionaerer File Manager
7 : - Version: 0.1, 09/09/04
8 : - Autor(en): Thorsten Buss <admin@drstone.de>,
9 : Michael Plefka <freAk0r@gmx.net>
10 : +---------------------------------------------------------------------------+
11 : This program is free software; you can redistribute it and/or
12 : modify it under the terms of the GNU General Public License
13 : as published by the Free Software Foundation; either version 2
14 : of the License, or any later version.
15 : +---------------------------------------------------------------------------+
16 : This program is distributed in the hope that it will be useful,
17 : but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : GNU General Public License for more details.
20 : You should have received a copy of the GNU General Public License
21 : along with this program; if not, write to the Free Software
22 : Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 : +--------------------------------------------------------------------------*/
24 :
25 : if (!defined("PATH_TO_ROOT")) {
26 : define("PATH_TO_ROOT", "../../");
27 : }
28 :
29 : /**
30 : * File Manager
31 : * @package eStudy.Ressourcen
32 : * @version 0.2, 20/09/04
33 : * @author Thorsten Buss <admin@drstone.de>
34 : * @author Michael Plefka <freAk0r@gmx.net>
35 : */
36 : /** Einbinden des Output Utilities */
37 : require_once (PATH_TO_ROOT."common/classes/class.output.inc.php");
38 : require_once (PATH_TO_ROOT."common/classes/class.email.inc.php");
39 : /** Einbinden der Datum/Zeit Funktionen */
40 : require_once (PATH_TO_ROOT."common/classes/class.dateselection.inc.php");
41 : /** Einbinden des Formual Generators */
42 : require_once (PATH_TO_ROOT."common/classes/class.formular.inc.php");
43 : require_once (PATH_TO_ROOT."roleplay/classes/class.roleartefacts.inc.php");
44 : require_once (PATH_TO_ROOT."teams/classes/class.teamartefacts.inc.php");
45 : /** Die Spider-Klasse der Suchmaschine einbinden */
46 : require_once (PATH_TO_ROOT."suchmaschine/classes/class.spider.inc.php");
47 : /**
48 : * Generiert Formular für Upload, Prüft Dateigröße und -typ
49 : * @package eStudy.Ressourcen
50 : * @version 0.2, 20/09/04
51 : * @author Thorsten Buss <admin@drstone.de>
52 : * @author Michael Plefka <freAk0r@gmx.net>
53 : */
54 : class Insert {
55 : /**
56 : * Die maximale Größe für hochgeladene Dateien.
57 : * @access private
58 : * @private integer
59 : */
60 : private $maxFileSize;
61 : /**
62 : * Verbotene Dateiendungen
63 : * @access private
64 : * @private array
65 : */
66 : private $forbiddenFileExtensions;
67 : /**
68 : * Rolle des aktuellen Benutzers, falls eine eingenommen wird.
69 : * @access private
70 : * @private object
71 : */
72 : private $role = null;
73 : /**
74 : * Team des Benutzers
75 : * @access private
76 : * @private object
77 : */
78 : private $team = null;
79 :
80 : /**
81 : * Konstruktor.
82 : * @access public
83 : */
84 : public function __construct() {
85 0 : global $settings;
86 0 : if (is_numeric($settings['filemanager_max_filesize'])) {
87 0 : $this->maxFileSize = $settings['filemanager_max_filesize'];
88 0 : }
89 0 : $this->forbiddenFileExtensions = $settings['filemanager_forbidden_extensions'];
90 0 : if (isset($_SESSION["roleID"])) {
91 0 : $this->role = new Role($_SESSION["roleID"]);
92 0 : }
93 0 : if (isset($_SESSION["teamID"])) {
94 0 : $this->team = new Team($_SESSION["teamID"]);
95 0 : }
96 0 : }
97 : /**
98 : * Generiert Formular für Insert
99 : * @access public
100 : * @return void
101 : */
102 : public function showForm($fileUpload = false, $copyFile = null) {
103 0 : global $db, $EZSQL_ERROR;
104 : // Initialisierung
105 0 : $maxFileSize = $this->maxFileSize;
106 0 : $forbiddenFileExtensions = $this->forbiddenFileExtensions;
107 0 : $time = time();
108 0 : $sqlAdd = "";
109 0 : $heute = getdate();
110 0 : $course = $_SESSION['course'];
111 0 : $form = new Formular();
112 : // INITIALISIERUNG von Kalender Anzeige
113 : // DateSelection Objekt erzeugen und das heutige (start-) Datum einstellen
114 0 : $calendar = new DateSelection(
115 0 : $heute['mday'], $heute['mon'], $heute['year'], $heute['hours'], $heute['minutes']
116 0 : );
117 : //Javascript deaktivieren
118 0 : $calendar->autoUpdate = false;
119 : //Name des Formulars einstellen
120 0 : $calendar->formName = "insert";
121 : //Die Ausgabestrings löschen (keine Bezeichner vor den Auswahlfeldern)
122 0 : $calendar->clearStrings();
123 :
124 : // URL ins Feld einfügen und Radio Button vorselektieren, sofern übergeben
125 0 : if(isset($_GET['url'])) {
126 0 : $actionChecked = 'link';
127 0 : $linkUrl = $_GET['url'];
128 0 : }
129 : else {
130 0 : $linkUrl = '';
131 0 : $actionChecked = '';
132 : }
133 :
134 : // Link Name ins Feld einfügen, sofern übergeben
135 0 : if(isset($_GET['name']))
136 0 : $linkName = $_GET['name'];
137 : else
138 0 : $linkName = '';
139 :
140 : // BEGIN von Formular erstellen
141 : // Init
142 0 : $form->setFormHead(
143 0 : "insert", "", "post", "multipart/form-data", "onsubmit=\"".
144 0 : (!$fileUpload ? "if (document.getElementById('link_ID').checked == false &&
145 0 : document.getElementById('folder_ID').checked == false".(($_SESSION['usergroup'] != STUDENT
146 0 : && $_SESSION['usergroup'] != ALUMNUS && $_SESSION['usergroup'] != SCHUELER
147 0 : && $_SESSION['usergroup'] != GAST) || isset($_SESSION["assistent"])
148 0 : ? " && document.getElementById('ROOT_ID').checked == false" : "") .
149 : ") { alert('Bitte wählen Sie, ob Sie einen Link oder Ordner
150 0 : erstellen wollen!'); return false; } ":
151 0 : "") ."if (document.getElementById('folder').value == ''".(!$fileUpload &&
152 0 : (($_SESSION['usergroup'] != STUDENT && $_SESSION['usergroup'] != ALUMNUS &&
153 0 : $_SESSION['usergroup'] != SCHUELER && $_SESSION['usergroup'] != GAST) ||
154 0 : isset($_SESSION["assistent"])) ? " && document.getElementById('ROOT_ID').
155 0 : checked == false" : "") .") { alert('Bitte wählen Sie einen Zielordner!');
156 : return false; }\""
157 0 : );
158 0 : $form->setTemplate(
159 0 : "<table width='100%'>", "<tr valign='top'><td class='tableCell'
160 0 : width='50%'>", "<td class='tableCell' width='50%'>"
161 0 : ); // Setzt die UmgebungsTags
162 0 : $form->setButtons(1, "Abschicken"); //Setzt die Buttons
163 0 : if (isset($this->role)) {
164 0 : $form->addRawCode(
165 : "<tr><td class='message' colspan='2'>Sie nehmen zur Zeit die Rolle <strong>".
166 0 : Data::toHTML($this->role->getName($_SESSION["gender"]), false) ."</strong> ein.<br />Wenn Sie ".
167 0 : ($fileUpload ? "eine Datei hochladen, wird diese" : "einen Ordner oder Link erstellen, wird dieser") .
168 : " unter Ihrem Rollennamen veröffentlicht.</td></tr>"
169 0 : );
170 0 : }
171 : // TrennZeile
172 : // Fuegt eine Ueberschriftszeile ein wenn eine Datei hochgeladen werden soll
173 0 : $form->addRawCode("<tr><td class='tableHead' colspan='2'>Benötigte Einstellungen</td></tr>");
174 0 : if ($fileUpload) {
175 0 : $form->addInput("hidden", "type", "", 1, "file");
176 0 : $form->addInput("hidden", "MAX_FILE_SIZE", "", 1, $maxFileSize*1024*1024);
177 :
178 : // MultiUpload: Titel fuer jede einzelne Upload-Moeglichkeit
179 0 : $form->addRawCode(
180 : "</table><div id='uploads'><table width='100%'><tr valign='top'>
181 : <td class='tableHead' colspan='2'><div style='text-align:center;'>
182 : Dateiinformationen für 1. Datei</div></td></tr>"
183 0 : );
184 :
185 0 : $name = (!is_null($copyFile)) ? $copyFile->getName() : "";
186 0 : $form->addInput(
187 0 : "text", "name[]", "Bitte geben Sie einen aussagekräftigen Namen für
188 0 : die Datei ein:<br/><span class='text10'>(max. 40 Zeichen)</span>", 50, $name, 40
189 0 : );
190 : // Beschreibung fuer DateiName auswahlen wird konstruiert (mit erlaubter Endung und max Groesse)
191 0 : if (!is_null($copyFile)) {
192 0 : $form->addInput("hidden", "copyFile", "", 1, $copyFile->getID());
193 0 : $form->addRawCode("<tr><td>Datei kopieren</td><td>".$copyFile->getOrigFileName()."</td></tr>");
194 0 : } else {
195 0 : $string = "Bitte wählen Sie eine Datei aus:<br/>";
196 0 : $string.= "<span class='text10'>";
197 0 : if ($maxFileSize) $string.= "max. ".$maxFileSize." MB";
198 0 : if ($maxFileSize && $forbiddenFileExtensions) $string.= ", ";
199 0 : if ($forbiddenFileExtensions) {
200 0 : $string.= "keine ";
201 0 : if (is_array($forbiddenFileExtensions)) {
202 0 : foreach($forbiddenFileExtensions as $value) $string.= ".".$value." ";
203 0 : } else $string.= ".".$forbiddenFileExtensions." Dateien";
204 0 : }
205 0 : $string.= "</span>";
206 0 : $form->addInput("file", "userfile[]", $string, 34);
207 :
208 0 : $form->addTextArea("comment[]", "Datei-Beschreibung (optional)", 40, 3, "");
209 :
210 : // MultiUpload: Link zu JavaScript-Funktion um zusaetzliches Upload-Formular einzublenden
211 0 : $form->addRawCode(
212 : "</table></div><table width='100%'><tr valign='top'><td class='tableCell' colspan='2'>
213 : <p style='text-align:right;'>
214 : <script>document.write(\"<a href='#' onclick='one_more_upload();
215 : return false;'>Mehr Dateien Uploaden</a>\");</script>
216 : </p></td></tr>"
217 0 : );
218 : }
219 0 : } else { // Wenn Ordner oder Link erstellt werden soll
220 0 : $folderJS = (($_SESSION['usergroup'] != STUDENT
221 0 : && $_SESSION['usergroup'] != ALUMNUS
222 0 : && $_SESSION['usergroup'] != SCHUELER
223 0 : && $_SESSION['usergroup'] != GAST)
224 0 : ? "document.getElementById('student_write').disabled=false;" : "") .
225 0 : "document.getElementById('userfileLink').style.display='none';".
226 0 : "document.getElementById('userfileFolder').style.display='inline';".
227 0 : "document.getElementById('nameLink').style.display='none';".
228 0 : "document.getElementById('nameFolder').style.display='inline';";
229 : $radio = array(array(
230 0 : "Link hinzufügen", "link", "onclick=\"".(($_SESSION['usergroup'] != STUDENT
231 0 : && $_SESSION['usergroup'] != ALUMNUS && $_SESSION['usergroup'] != SCHUELER
232 0 : && $_SESSION['usergroup'] != GAST) ? "document.getElementById('student_write').disabled=true;" : "") .
233 0 : "document.getElementById('userfileLink').style.display='inline';".
234 0 : "document.getElementById('userfileFolder').style.display='none';".
235 0 : "document.getElementById('nameLink').style.display='inline';".
236 0 : "document.getElementById('nameFolder').style.display='none';".
237 0 : "document.getElementById('folder').disabled=false\""), array(
238 0 : "Ordner erstellen", "folder", "onclick=\"$folderJS"."document.getElementById('folder').disabled=false\""
239 0 : )
240 0 : );
241 : // Wenn Admin, Dozent oder Tutor, dann darf er auch einen Root Ordner erstellen
242 0 : if (($_SESSION['usergroup'] != STUDENT
243 0 : && $_SESSION['usergroup'] != ALUMNUS
244 0 : && $_SESSION['usergroup'] != SCHUELER
245 0 : && $_SESSION['usergroup'] != GAST)
246 0 : || isset($_SESSION["assistent"])) {
247 0 : $radio[] = array(
248 0 : "Hauptordner erstellen", "ROOT", "onclick=\"$folderJS".
249 : "document.getElementById('folder').disabled=true\""
250 0 : );
251 0 : }
252 :
253 0 : $form->addRadio(
254 0 : "type", $radio, "Aktion wählen:" . (($_SESSION['usergroup'] != STUDENT
255 0 : && $_SESSION['usergroup'] != ALUMNUS && $_SESSION['usergroup'] != SCHUELER
256 0 : && $_SESSION['usergroup'] != GAST) || isset($_SESSION["assistent"])
257 0 : ? "" : "<br/><span class='text10'>(Hauptordner sind Ordner auf oberster Ebene)</span>"),
258 : $actionChecked
259 0 : );
260 :
261 0 : if (($_SESSION['usergroup'] != STUDENT
262 0 : && $_SESSION['usergroup'] != ALUMNUS
263 0 : && $_SESSION['usergroup'] != SCHUELER
264 0 : && $_SESSION['usergroup'] != GAST)
265 0 : || isset($_SESSION["assistent"])) {
266 0 : $form->addToNextTag("id='student_write'");
267 0 : $form->addInput(
268 0 : "checkbox", "student_write", "<strong>Nur für Ordner: </strong>
269 : Schreibberechtigung für Studenten"
270 0 : );
271 0 : }
272 :
273 0 : $form->addInput(
274 0 : "text", "userfile", "<span id='userfileLink'><strong>Link: </strong>Bitte geben
275 : Sie eine URL ein.<br/></span><span id='userfileFolder'><strong>Ordner: </strong>Bitte
276 : geben Sie einen Ordnernamen ein.<br/><span class='text10'>(OrdnerName => max. 20 Zeichen)
277 0 : </span></span>", 41, $linkUrl
278 0 : );
279 0 : $form->addInput(
280 0 : "text", "name", "<span id='nameLink'><strong>Link: </strong>Bitte geben Sie einen
281 : Namen für den Link an.<br/></span><span id='nameFolder'><strong>Ordner: </strong>
282 : Bitte geben Sie einen erläuternden Namen (Tooltip) für den Ordner an.<br/>
283 0 : </span><span class='text10'>(max. 40 Zeichen)</span>", 41, $linkName, 40
284 0 : );
285 : }
286 :
287 : // SQL Abfragen fuer Unterschiedliche UserGruppen => admin und Dozenten duerfen alle Dateien und Verz. sehen
288 0 : if (($_SESSION['usergroup'] == STUDENT
289 0 : || $_SESSION['usergroup'] == ALUMNUS
290 0 : || $_SESSION['usergroup'] == SCHUELER
291 0 : || $_SESSION['usergroup'] == GAST)
292 0 : || isset($_SESSION["assistent"])) {
293 0 : $sqlAdd = "AND (userID='".$_SESSION['userid'].
294 0 : "' OR (visible_type='1' AND start_time<'$time' AND
295 0 : end_time>'$time' AND student_write=1) )";
296 0 : }
297 0 : elseif ($_SESSION['usergroup'] == SEKRETARIAT) {
298 0 : $sqlAdd = "AND (userID='".$_SESSION['userid']."' OR visible_type<=2)";
299 0 : }
300 :
301 : // Zeichnet die OrdnerListe in Baumstruktur
302 0 : $folderArr = NULL;
303 0 : $this->printSubFolder(0, $sqlAdd, $folderArr, 0, "");
304 0 : $selectedFolder = "";
305 0 : if (isset($_SERVER["HTTP_REFERER"])) {
306 0 : if (preg_match("/activeFolder=([0-9]+)/", $_SERVER["HTTP_REFERER"], $selectedFolder)) {
307 0 : $selectedFolder = $selectedFolder[1];
308 0 : }
309 0 : }
310 0 : if (!is_array($folderArr)) {
311 0 : echo "<table>";
312 0 : if ($_SESSION['usergroup'] == STUDENT
313 0 : || $_SESSION['usergroup'] == ALUMNUS
314 0 : || $_SESSION['usergroup'] == SCHUELER
315 0 : || $_SESSION['usergroup'] == GAST) {
316 0 : Output::errorMessage(
317 : "Entschuldigung, der Dozent oder Admin hat noch keine Ordner angelegt,
318 0 : deshalb können Sie derzeit keine Dateien hochladen.", 1
319 0 : );
320 0 : } else Output::errorMessage(
321 0 : "Sie müssen erst einen Hauptordner anlegen, bevor Studenten etwas hochladen können!", 1
322 0 : );
323 0 : echo "</table>";
324 0 : $form->addLine(
325 0 : " ", "Noch keine Ordner angelegt.<br/>Es ist nicht möglich etwas
326 : zu Erstellen oder Hochzuladen."
327 0 : );
328 0 : } else {
329 0 : $form->addToNextTag("style='width:300;' id='folder'");
330 0 : $form->addSelect(
331 0 : "folder", "Bitte geben Sie den Zielordner an".(($_SESSION['usergroup'] == STUDENT
332 0 : || $_SESSION['usergroup'] == ALUMNUS || $_SESSION['usergroup'] == SCHUELER
333 0 : || $_SESSION['usergroup'] == GAST) ? "" : "<br/><span class='text10'>(ist ohne
334 0 : Bedeutung, wenn Sie einen Hauptordner anlegen.)</span>"), $folderArr,
335 0 : count($folderArr) > 10 ? 10 : count($folderArr), false, $selectedFolder
336 0 : );
337 : }
338 0 : if (!$fileUpload) {
339 0 : $description = (!is_null($copyFile)) ? $copyFile->getDescription() : "";
340 0 : $form->addTextArea("comment", "Datei-Beschreibung (optional)", 40, 3, $description);
341 0 : }
342 0 : $visibleArr = array(array("Alle", "1"), array("Dozenten und Tutoren", "2"), array("Dozenten", "3"));
343 0 : $form->addSelect(
344 0 : "visible", "Wählen Sie hier die Benutzergruppe
345 0 : aus, die Ihren Eintrag sehen darf:", $visibleArr
346 0 : );
347 0 : $form->addButtons();
348 0 : if (($_SESSION['usergroup'] != STUDENT
349 0 : && $_SESSION['usergroup'] != ALUMNUS
350 0 : && $_SESSION['usergroup'] != SCHUELER
351 0 : && $_SESSION['usergroup'] != GAST)
352 0 : || isset($_SESSION["assistent"])
353 0 : || (($_SESSION['usergroup'] != STUDENT
354 0 : && $_SESSION['usergroup'] != ALUMNUS
355 0 : && $_SESSION['usergroup'] != SCHUELER
356 0 : && $_SESSION['usergroup'] != GAST)
357 0 : || isset($_SESSION["assistent"])
358 0 : && $course > 0))
359 0 : {
360 : // Ueberschriftszeile
361 0 : $form->addRawCode("<tr><td class='tableHead' colspan='2'>Optionale Einstellungen</td></tr>");
362 : // Wenn im Foyer dann Alle Anzeigen
363 0 : if ($course == 0) $names = $db->get_results(
364 : "SELECT ID, Vorname, Nachname FROM user WHERE Usergroup > 1 AND Invisible = 0 AND
365 0 : ID <> ".$_SESSION["userid"]." ORDER BY Nachname, Vorname"
366 0 : );
367 0 : else $names = $db->get_results(
368 0 : "SELECT ID, Vorname, Nachname, user_course.courseID FROM user, user_course
369 0 : WHERE user.ID=user_course.userID AND user_course.courseID='$course' AND
370 0 : Usergroup > 1 AND userID <> ".$_SESSION["userid"]." ORDER BY Nachname, Vorname"
371 0 : );
372 : // Erstellt UserListe fuer Spezielle Sichtbarkeit
373 0 : $count = 0;
374 0 : if (is_array($names)) foreach($names as $name) {
375 0 : $visibleListArr[$count][0] = Data::toHTML($name->Nachname.", ".$name->Vorname, false);
376 0 : $visibleListArr[$count++][1] = $name->ID;
377 0 : }
378 0 : if (!empty($visibleListArr)) $form->addSelect(
379 0 : "visibleList", "Hier können Sie zusätzliche Personen auswählen, die
380 : Ihren Eintrag sehen dürfen:<br/>(Für Mehrfachselektierung STRG-Taste beim
381 : Klicken gedrückt halten.)<br/><strong>(wird ignoriert, wenn als Benutzergruppe
382 0 : "Alle" ausgewählt ist!)</strong>", $visibleListArr, 10, true
383 0 : );
384 0 : }
385 0 : if (($_SESSION['usergroup'] != STUDENT
386 0 : && $_SESSION['usergroup'] != ALUMNUS
387 0 : && $_SESSION['usergroup'] != SCHUELER
388 0 : && $_SESSION['usergroup'] != GAST)
389 0 : || isset($_SESSION["assistent"])) {
390 0 : $form->addMarker();
391 : // Email-Benachrichtigungsfunktion
392 0 : $form->addInput(
393 0 : "checkbox", "email", "Benachrichtigung an alle
394 0 : <strong>Mitglieder</strong> per Email?", 0, 1
395 0 : );
396 0 : $form->addInput(
397 0 : "checkbox", "teacherEMail", "Benachrichtigung an alle
398 0 : <strong>Dozenten</strong> per Email?", 0, 1
399 0 : );
400 0 : $form->addButtons();
401 0 : echo $form->getForm(0);
402 : /* kalender plugin */
403 :
404 : ?>
405 : <tr>
406 : <td class='tableCell'>Für welche Zeit sichtbar?<br/>
407 0 : <span class='text10'>(wenn Sie nichts auswählen ist der Eintrag immer sichtbar)</span></td>
408 : <td class='tableCell'>Anzeigebeginn Datum/Zeit:<br/>
409 0 : <?php
410 : //falls $_POST - Variablen vorhanden sind, auf das entsprechende Datum einstellen
411 0 : if (isset($_POST['openDate_day'])) {
412 0 : $calendar->setDate($_POST['openDate_day'], $_POST['openDate_month'], $_POST['openDate_year']);
413 0 : $calendar->setTime($_POST['openDate_hour'], $_POST['openDate_minute']);
414 0 : }
415 : //die Datums Auswahlfelder ausgeben
416 0 : $calendar->printCalender("openDate", "dateExt");
417 0 : $calendar->printCalender("openDate", "time");
418 : ?>
419 : <br/><br/>Anzeigeende Datum/Zeit:<br/>
420 0 : <?php
421 : //falls $_POST - Variablen vorhanden sind, auf das entsprechende Datum einstellen
422 0 : if (isset($_POST['closeDate_day'])) {
423 0 : $calendar->setDate($_POST['closeDate_day'], $_POST['closeDate_month'], $_POST['closeDate_year']);
424 0 : $calendar->setTime($_POST['closeDate_hour'], $_POST['closeDate_minute']);
425 0 : }
426 0 : $calendar->printCalender("closeDate", "dateExt");
427 0 : $calendar->printCalender("closeDate", "time");
428 0 : echo " </td>\n</tr>\n";
429 : /* kalender plugin */
430 0 : echo $form->getForm(1);
431 0 : } else {
432 0 : echo $form->getForm();
433 : }
434 0 : }
435 : /**
436 : * erstellt eine baumstrukur aller Ordner auf die der User Schreibrechte hat und die er sehen darf
437 : * @access private
438 : * @param ezsql [$fileID] -
439 : * @param string [$sqlAdd] - SQL zusatz, ist Usergruppenabhaenigig
440 : * @param array [$folderArr] - Array der Ermittelten Folder, ist ein Zeiger der Uebergeben wird
441 : * @param int [$count] - Ist der Array Zaehler von folderArr
442 : * @param string [$layer] - Sind die zeichen vorm Ordnernamen fuer visualisierung der baumstrukur
443 : * @return Anzahl der Elemente im Array
444 : */
445 : public function printSubFolder($fileID, $sqlAdd, &$folderArr, $count = 0, $layer = "··") {
446 0 : global $db;
447 0 : $folders = $db->get_results(
448 : "SELECT fileID, link, student_write, userID FROM filelist WHERE parent_object='".
449 0 : $fileID."' AND courseID=".$_SESSION['course']." AND type='folder' $sqlAdd ORDER BY name"
450 0 : );
451 0 : if ($folders) foreach($folders as $folder) {
452 0 : $folderArr[$count][0] = $layer." • ".Data::toHTML($folder->link, false);
453 0 : $folderArr[$count++][1] = $folder->fileID;
454 0 : $count = $this->printSubFolder($folder->fileID, $sqlAdd, $folderArr, $count, $layer."··");
455 0 : }
456 0 : return $count;
457 : }
458 : /**
459 : * Prüft ob die Dateigröße dem Limit im Config-File entspricht
460 : * @access public
461 : * @param integer $size - Größe der Datei
462 : * @return bool - true wenn Größe OK
463 : */
464 : public function fileSizeOK($size) {
465 0 : if ($this->maxFileSize) {
466 0 : if (($size/1000000) > $this->maxFileSize) return false;
467 0 : if ($size <= 0) return false;
468 0 : }
469 0 : return true;
470 : }
471 : /**
472 : * Prüft ob der Dateityp laut Config-File erlaubt ist
473 : * @access public
474 : * @param string $name - Dateiname
475 : * @return bool - true wenn Dateityp OK
476 : */
477 : public function fileExtOK($name) {
478 0 : if ($this->forbiddenFileExtensions) {
479 0 : $pos = strrpos($name, ".");
480 0 : if ($pos) {
481 0 : $ext = substr($name, $pos+1);
482 0 : if (is_array($this->forbiddenFileExtensions)) {
483 0 : foreach($this->forbiddenFileExtensions as $value) {
484 0 : if (strtolower($ext) == strtolower($value)) return false;
485 0 : }
486 0 : } elseif (strtolower($ext) == strtolower($this->forbiddenFileExtensions)) return false;
487 0 : }
488 0 : }
489 0 : return true;
490 : }
491 : /**
492 : * Versendet die Benachrichtigungsmail für eine neue hochgeladene Datei.
493 : * @access public
494 : * @param integer $fileID - die ID der hochgeladenen Datei
495 : * @param bool $toTeachers - ob die Emails nur an Dozenten geschickt werden sollen
496 : * @return bool
497 : */
498 : public function sendEmail($fileID, $toTeachers = false) {
499 0 : global $db, $settings;
500 0 : if (!is_numeric($fileID)) return false;
501 0 : $file = $db->get_row("SELECT * FROM filelist WHERE fileID='$fileID'");
502 0 : if ($file) {
503 0 : $email = new Email($_SESSION['userid']);
504 0 : if ($toTeachers) {
505 0 : if ($file->courseID == 0) {
506 0 : $query = "SELECT ID FROM user WHERE Usergroup=3";
507 0 : } else {
508 : $query = "SELECT ID
509 : FROM user JOIN user_course ON ID=userID
510 0 : WHERE courseID='".$file->courseID."' AND
511 0 : ((differentUsergroup=0 AND Usergroup=3) OR differentUsergroup=3)";
512 : }
513 0 : } else {
514 0 : if ($file->courseID == 0) {
515 0 : $query = "SELECT ID FROM user WHERE Invisible=0";
516 0 : } else {
517 0 : $query = "SELECT userID FROM user_course WHERE courseID ='".$file->courseID."'";
518 : }
519 : }
520 0 : $users = $db->get_col($query);
521 0 : if ($file->courseID > 0) {
522 0 : $courseName = $db->get_var("SELECT Name FROM courses WHERE ID='".$file->courseID."'");
523 0 : }
524 0 : $user = $db->get_row("SELECT Vorname, Nachname FROM user WHERE ID='".$file->userID."'");
525 0 : $subject = $settings["label"].": Neue Ressource im ".
526 0 : (empty($courseName) ? "Foyer" : "Kurs \"$courseName\"");
527 0 : $message = "Guten Tag,\n\n".$user->Vorname." ".$user->Nachname." hat ".
528 0 : ($file->type == "link" ? "einen neuen Link" : ($file->type == "file" ?
529 0 : "eine neue Datei" : "einen neuen Ordner")) ." mit der Bezeichnung\n\n\t".
530 0 : $file->name.(empty($file->description) ? "" : "\n\n\t".$file->description) .
531 0 : "\n\nim ".(empty($courseName) ? "Foyer" : "Kurs \"$courseName\"") .
532 0 : " bereitgestellt".($file->type == "link" ? ":\n\n\t<".$file->link.">" : ".") .
533 0 : "\n\nViele Grüße,\n\nIhr Kursdozent";
534 0 : return $email->sendMessageToUser($subject, $users, $message);
535 : }
536 0 : return false;
537 : }
538 : /**
539 : * Wertet das Formular aus und traegt die Daten in die Datenbank ein
540 : * @access public
541 : * @param array $data - Array mit dem Formulareintraegen
542 : * @return bool - Erfolgswert
543 : */
544 : public function resolveForm($data) {
545 0 : global $db, $EZSQL_ERROR;
546 0 : echo "<table>";
547 : /* FEHLERUEBERPRUEFUNG BEGIN */
548 0 : if (!in_array($data["type"], array("folder", "link", "file", "ROOT"))) {
549 0 : $error = "Bitte wählen Sie aus, ob Sie einen Link oder einen Ordner erstellen wollen.";
550 0 : Output::errorMessage($error, 2);
551 0 : echo "</table>";
552 0 : return false;
553 : }
554 0 : if ($data['link'] == "") {
555 0 : switch ($data['type']) {
556 0 : case 'ROOT':
557 0 : case 'folder':
558 0 : $error = "Sie haben keinen Ordnernamen angegeben!";
559 0 : break;
560 :
561 0 : case 'link':
562 0 : $error = "Sie haben keinen Link angegeben!";
563 0 : break;
564 :
565 0 : case 'file':
566 0 : $error = "Sie haben keine Datei ausgewählt!";
567 0 : break;
568 0 : }
569 0 : Output::errorMessage($error, 2);
570 0 : }
571 0 : if ($data['name'] == "") {
572 0 : switch ($data['type']) {
573 0 : case 'ROOT':
574 0 : case 'folder':
575 0 : $error = "Sie haben keinen erläuternden Ordnernamen (Tooltip) angegeben!";
576 0 : break;
577 :
578 0 : case 'link':
579 0 : $error = "Sie haben keinen Namen für den Link angegeben!";
580 0 : break;
581 :
582 0 : case 'file':
583 0 : $error = "Sie haben keinen Namen für die Datei angegeben!";
584 0 : break;
585 0 : }
586 0 : if (!empty($error)) Output::errorMessage($error, 2);
587 0 : }
588 0 : if ($data['parent_object'] == "" && $data['type'] != 'ROOT') {
589 0 : $error = "Sie haben keinen Zielordner ausgewählt!";
590 0 : Output::errorMessage($error, 2);
591 0 : }
592 0 : if ($data['type'] == 'link') {
593 0 : if (!Utilities::validateURL($data['link'])) {
594 0 : $error = "Sie haben eine ungültige URL angegeben!";
595 0 : Output::errorMessage($error, 2);
596 0 : }
597 0 : if (strlen($data['name']) > 40) {
598 0 : $error = "Linkname darf höchstens 40 Zeichen lang sein.";
599 0 : Output::errorMessage($error, 2);
600 0 : }
601 0 : }
602 0 : if ($data['type'] == 'file') {
603 0 : if ($data['orig_filename'] == '' || strlen($data['extension']) > 5 || strlen($data['extension']) < 0) {
604 0 : $error = "Keine Datei ausgewählt oder Dateiendung ungültig! (Länge hinter . 1-4)";
605 0 : Output::errorMessage($error, 2);
606 0 : if ($data['tmpfileTmpName'] != '') unlink($data['tmpfileTmpName']);
607 0 : } elseif (!($this->fileSizeOK($data['size']))) {
608 0 : $error = "Datei ist entweder über der zulässigen Größe, oder sie ist leer!";
609 0 : Output::errorMessage($error, 2);
610 0 : if ($data['tmpfileTmpName'] != '') unlink($data['tmpfileTmpName']);
611 0 : } elseif (!($this->fileExtOK($data['orig_filename']))) {
612 0 : $error = "Dateityp ist nicht erlaubt!";
613 0 : Output::errorMessage($error, 2);
614 0 : if ($data['tmpfileTmpName'] != '') unlink($data['tmpfileTmpName']);
615 0 : }
616 0 : }
617 0 : if ($data['type'] == 'folder') {
618 0 : if (strlen($data['link']) > 20) {
619 0 : $error = "Ordnername darf höchstens 20 Zeichen lang sein.";
620 0 : Output::errorMessage($error, 2);
621 0 : }
622 0 : }
623 : // Wenn bis hierher schon ein Fehler festgestellt wurde bricht er ab
624 0 : if (isset($error)) {
625 0 : echo "</table>";
626 0 : return false;
627 : }
628 : /* FEHLERUEBERPRUEFUNG ENDE */
629 0 : switch ($data['type']) {
630 0 : case 'ROOT': // Hauptordner anlegen
631 0 : $data['type'] = 'folder';
632 0 : $data['parent_object'] = 0;
633 0 : $type = "von Hauptordner";
634 0 : break;
635 :
636 0 : case 'folder': // Unterordner anlegen
637 0 : $type = "von Ordner";
638 0 : break;
639 :
640 0 : case 'link':
641 0 : $type = "von Link";
642 0 : break;
643 :
644 0 : case 'file':
645 0 : $type = "von Datei";
646 0 : break;
647 0 : }
648 : // Baut die SQL Abfrage anhand des Arrays data auf.
649 : // Alle Felder ohne "tmp" werden als FeldName benutzt und ihr Wert in die DB eingetragen
650 0 : $sqlKeys = $sqlValues = '';
651 0 : foreach($data as $key => $value) {
652 0 : if (!strstr($key, "tmp")) {
653 0 : $sqlKeys.= $key.',';
654 0 : $sqlValues.= "'".Data::toMysql($value) ."',";
655 0 : }
656 0 : }
657 : // Ordner existiert schon ??
658 0 : if ($data['type'] == 'folder' && ($db->get_var(
659 0 : "SELECT fileID FROM filelist WHERE parent_object='".$data['parent_object'].
660 0 : "' AND courseID =".$data['courseID']." AND link='".$data['link']."' LIMIT 1"
661 0 : ) != "")) {
662 0 : Output::errorMessage(
663 : "Ein Ordner mit dem selben Namen existiert schon in diesem Ordner.
664 0 : <br/>Wählen Sie bitte einen anderen Namen.", 2
665 0 : );
666 0 : echo "</table>";
667 0 : return false;
668 : }
669 : // Selber Link schon in diesem Ordner vorhanden ??
670 0 : if ($data['type'] == 'link' && $db->get_var(
671 : "SELECT fileID FROM filelist WHERE parent_object='".
672 0 : $data['parent_object']."' AND courseID=".$_SESSION['course'].
673 0 : " AND link='".$data['link']."' LIMIT 1"
674 0 : ) != "") {
675 0 : Output::errorMessage("Ein Link mit dem selben Namen existiert bereits in diesem Ordner!", 2);
676 0 : echo "</table>";
677 0 : return false;
678 : }
679 : // SQL Abfrage ohne Endene Kommas
680 0 : $sql = "INSERT INTO filelist (".substr($sqlKeys, 0, -1) .") VALUES (".substr($sqlValues, 0, -1) .")";
681 0 : $errorCount = count($EZSQL_ERROR);
682 0 : $db->query($sql);
683 0 : $data['fileID'] = $db->insert_id;
684 0 : if (count($EZSQL_ERROR) > $errorCount || $data['fileID'] < 0) {
685 0 : Output::errorMessage("Fehler beim Anlegen ".$type." in der Datenbank!");
686 0 : echo "</table>";
687 0 : return false;
688 0 : } elseif ($data['type'] == 'file') {
689 0 : if (!$this->uploadFile($data)) {
690 0 : $db->query("DELETE FROM filelist WHERE fileID='${data['fileID']}'");
691 0 : $data['fileID'] = "";
692 0 : Output::errorMessage("Aktion nicht erfolgreich durchgeführt!", 2);
693 0 : echo "</table>";
694 0 : return false;
695 : }
696 0 : }
697 0 : if (isset($this->role)) {
698 0 : RoleArtefacts::setRoleForItem(RESSOURCE, $data["fileID"], $_SESSION["roleID"]);
699 0 : }
700 0 : if (isset($this->team)) {
701 0 : TeamArtefacts::setTeamForItem(RESSOURCE, $data["fileID"], $_SESSION["teamID"]);
702 0 : }
703 0 : if ($data['fileID'] && $data['visible_type'] != 1 && isset($data['tmpfileVisibleList'])) {
704 : // Spezielle UserSichtbarkeit in DB eintragen
705 0 : $errorCount = count($EZSQL_ERROR);
706 0 : foreach($data['tmpfileVisibleList'] as $value) {
707 0 : $db->query("INSERT INTO filevisible (fileID,userID) VALUES(".$data['fileID'].",".$value.")");
708 0 : }
709 0 : if (count($EZSQL_ERROR) > $errorCount) {
710 0 : Output::errorMessage("Aktion nicht erfolgreich durchgeführt!", 2);
711 0 : echo "</table>";
712 0 : return false;
713 : }
714 0 : }
715 0 : if ($data['type'] != 'file') {
716 0 : if ($data['tmpemail'] || $data['tmpteacherEMail']) {
717 0 : if ($this->sendEmail($data['fileID'], ($data['tmpteacherEMail'] && !$data['tmpemail'])))
718 0 : Output::echoMessage("Benachrichtigungs-Mails versandt.", 2);
719 0 : else Output::errorMessage("Benachrichtigungs-Mails konnten nicht versandt werden!", 2);
720 0 : }
721 0 : }
722 0 : Output::echoMessage("Aktion wurde erfolgreich durchgeführt!", 2);
723 0 : echo "</table>";
724 0 : unset($_POST);
725 0 : if ($data['type'] == 'file') {
726 : // hochgeladene Datei indizieren
727 0 : $spider = new Spider();
728 0 : $spider->start("add-file", $data['fileID']);
729 0 : }
730 0 : return $data["fileID"];
731 : }
732 : /**
733 : * Laed die Datei mit der fileID $fileID hoch
734 : *
735 : * @param array [$data] Array mit den Formular-Eingaben
736 : * @return boolean Erfolgswert
737 : * @access private
738 : */
739 : private function uploadFile($data) {
740 0 : global $settings;
741 : // Konstruktion des Uploadverzeichnis
742 0 : $uploaddir = PATH_TO_ROOT.$settings["upload_path"].'filemanager/courseID/'.$data['courseID'].'/';
743 : // Verzeichnis anlegen wenn noch nicht vorhanden
744 0 : if (!(is_dir($uploaddir))) Utilities::mkdir_r($uploaddir);
745 0 : $uploadSuccess = false;
746 : // Datei wird hochgeladen
747 0 : if (isset($data['tmpfileTmpName'])) {
748 0 : $uploadSuccess = move_uploaded_file($data['tmpfileTmpName'], $uploaddir.$data['link']);
749 0 : } else if (isset($data['tmpPathToFile'])) {
750 0 : $uploadSuccess = copy($data['tmpPathToFile'], $uploaddir.$data['link']);
751 0 : }
752 0 : if ( $uploadSuccess ) {
753 0 : if ($data['tmpemail'] || $data['tmpteacherEMail']) {
754 0 : if ($this->sendEmail($data['fileID'], ($data['tmpteacherEMail'] && !$data['tmpemail'])))
755 0 : Output::echoMessage("Benachrichtigungs-Mails versandt.", 1);
756 0 : else Output::errorMessage("Benachrichtigungs-Mails konnten nicht versandt werden!", 1);
757 0 : }
758 0 : Output::echoMessage("Datei erfolgreich gesendet", 1);
759 0 : return true;
760 : } else {
761 0 : Output::errorMessage("Fehler beim Senden der Datei aufgetreten!", 1);
762 0 : return false;
763 : }
764 : }
765 : }
|